<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow-IPC: ipc::transport::struc::Msg_in&lt; Message_body, Struct_reader_config &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow-IPC<span id="projectnumber">&#160;1.0.2</span>
   </div>
   <div id="projectbrief">Flow-IPC project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceipc.html">ipc</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1transport.html">transport</a></li><li class="navelem"><a class="el" href="namespaceipc_1_1transport_1_1struc.html">struc</a></li><li class="navelem"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-types">Protected Types</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classipc_1_1transport_1_1struc_1_1Msg__in-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">ipc::transport::struc::Msg_in&lt; Message_body, Struct_reader_config &gt; Class Template Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A structured in-message <em>instance</em> suitable as received and emittable (to user) by <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a>.  
 <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="msg_8hpp_source.html">msg.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for ipc::transport::struc::Msg_in&lt; Message_body, Struct_reader_config &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1struc_1_1Msg__in__inherit__graph.svg" width="195" height="227"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for ipc::transport::struc::Msg_in&lt; Message_body, Struct_reader_config &gt;:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classipc_1_1transport_1_1struc_1_1Msg__in__coll__graph.svg" width="776" height="415"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:aa408e309fcb402c061d969742874ca6c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c">Body</a> = Message_body</td></tr>
<tr class="memdesc:aa408e309fcb402c061d969742874ca6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#a27a273ed7e1aca34b721fea22c869a41" title="Short-hand for the Message_body template param, this is the capnp message schema transmissible over *...">struc::Channel::Msg_body</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c">More...</a><br /></td></tr>
<tr class="separator:aa408e309fcb402c061d969742874ca6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6e21b165a0673138db44d86584dd5059"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">Body_reader</a> = typename Body::Reader</td></tr>
<tr class="memdesc:a6e21b165a0673138db44d86584dd5059"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for capnp-generated read-only-accessing <code>Reader</code> nested class of <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c" title="See struc::Channel::Msg_body.">Body</a>. See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">More...</a><br /></td></tr>
<tr class="separator:a6e21b165a0673138db44d86584dd5059"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8c335ada1b33fcc732047283e60177b"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">Reader_config</a> = Struct_reader_config</td></tr>
<tr class="memdesc:af8c335ada1b33fcc732047283e60177b"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#ad3ff78f00b7f230562d713ec6cf8499c" title="Short-hand for the reader engine type.">struc::Channel::Reader_config</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">More...</a><br /></td></tr>
<tr class="separator:af8c335ada1b33fcc732047283e60177b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a234708ed176f270f6372536ba3571b9a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a234708ed176f270f6372536ba3571b9a">~Msg_in</a> ()</td></tr>
<tr class="memdesc:a234708ed176f270f6372536ba3571b9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns resources, potentially including potentially significant RAM resources, taken before emitting to the user.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a234708ed176f270f6372536ba3571b9a">More...</a><br /></td></tr>
<tr class="separator:a234708ed176f270f6372536ba3571b9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a56fa38feb9c907ae3f0f1a6ff16dd32f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">Body_reader</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f">body_root</a> () const</td></tr>
<tr class="memdesc:a56fa38feb9c907ae3f0f1a6ff16dd32f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c" title="See struc::Channel::Msg_body.">Body</a> root capnp-generated accessor object.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f">More...</a><br /></td></tr>
<tr class="separator:a56fa38feb9c907ae3f0f1a6ff16dd32f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aba0b83c9d8a7e8f782202406ca387e2c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c">native_handle_or_null</a> () const</td></tr>
<tr class="memdesc:aba0b83c9d8a7e8f782202406ca387e2c"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> &ndash; potentially null meaning none &ndash; embedded in this message.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c">More...</a><br /></td></tr>
<tr class="separator:aba0b83c9d8a7e8f782202406ca387e2c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4783bd852b1dcba1542e0cfe37205e9e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4783bd852b1dcba1542e0cfe37205e9e">to_ostream</a> (std::ostream *os) const</td></tr>
<tr class="memdesc:a4783bd852b1dcba1542e0cfe37205e9e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation to the given <code>ostream</code>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4783bd852b1dcba1542e0cfe37205e9e">More...</a><br /></td></tr>
<tr class="separator:a4783bd852b1dcba1542e0cfe37205e9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-types" name="pro-types"></a>
Protected Types</h2></td></tr>
<tr class="memitem:afdc86a45b50e9869329b11a1e576b172"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#afdc86a45b50e9869329b11a1e576b172">Internal_msg_body_reader</a> = typename schema::detail::StructuredMessage::InternalMessageBody::Reader</td></tr>
<tr class="memdesc:afdc86a45b50e9869329b11a1e576b172"><td class="mdescLeft">&#160;</td><td class="mdescRight"><code>Reader</code> counterpart to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html#a8b0d864f297026952728c9bf5f90cb19" title="In the event *this describes an internally-created message – for internal purposes,...">Msg_mdt_out::Internal_msg_body_builder</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#afdc86a45b50e9869329b11a1e576b172">More...</a><br /></td></tr>
<tr class="separator:afdc86a45b50e9869329b11a1e576b172"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad2c43c92a286ab7d186d810631a1701"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad2c43c92a286ab7d186d810631a1701">Mdt</a> = schema::detail::StructuredMessage</td></tr>
<tr class="memdesc:aad2c43c92a286ab7d186d810631a1701"><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html#aab352abf2ced76f2bad6700d75290132" title="See struc::Channel::Msg_body.">Msg_mdt_out::Body</a></code>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad2c43c92a286ab7d186d810631a1701">More...</a><br /></td></tr>
<tr class="separator:aad2c43c92a286ab7d186d810631a1701"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a99df8a99bc2ed106d6a03f807e6e5966"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">Mdt_reader</a> = typename Mdt::Reader</td></tr>
<tr class="memdesc:a99df8a99bc2ed106d6a03f807e6e5966"><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html#a49dd99dd16346904de43a7af3dbf5379" title="Short-hand for capnp-generated mutating Builder nested class of Body. See body_root().">Msg_mdt_out::Body_builder</a></code> but the <code>Reader</code> instead.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">More...</a><br /></td></tr>
<tr class="separator:a99df8a99bc2ed106d6a03f807e6e5966"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pro-methods" name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:ae3e6be294fbff87979a407a9e971da8a"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ae3e6be294fbff87979a407a9e971da8a">Msg_in</a> (const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">Reader_config</a> &amp;struct_reader_config)</td></tr>
<tr class="memdesc:ae3e6be294fbff87979a407a9e971da8a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs a not-ready-for-public-consumption in-message which awaits serialization-storing segments to be added via <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> and then finalized with <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> and possibly <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ae3e6be294fbff87979a407a9e971da8a">More...</a><br /></td></tr>
<tr class="separator:ae3e6be294fbff87979a407a9e971da8a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac4f7c03e1080913f949b9b24b776dc6a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac4f7c03e1080913f949b9b24b776dc6a">store_native_handle_or_null</a> (<a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> &amp;&amp;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c">native_handle_or_null</a>)</td></tr>
<tr class="memdesc:ac4f7c03e1080913f949b9b24b776dc6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Store the <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> (potentially <code>.null()</code>, meaning none) in this in-message.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac4f7c03e1080913f949b9b24b776dc6a">More...</a><br /></td></tr>
<tr class="separator:ac4f7c03e1080913f949b9b24b776dc6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3a1a75d7d7b108d46efa1892dd2571b7"><td class="memItemLeft" align="right" valign="top">flow::util::Blob *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7">add_serialization_segment</a> (size_t max_sz)</td></tr>
<tr class="memdesc:a3a1a75d7d7b108d46efa1892dd2571b7"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prior to <code>deserialization_*()</code> obtains a memory area <code>max_sz</code> bytes long into which the user may write-to until the next <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a>, <code>deserialization_*()</code>, or dtor call (whichever happens first); returns a pointer to that area as described by the pointed-to <code>Blob</code>'s [<code>begin()</code>, <code>end()</code>) range.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7">More...</a><br /></td></tr>
<tr class="separator:a3a1a75d7d7b108d46efa1892dd2571b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd387ce27214601a70a0e1c6025075f1"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1">deserialize_mdt</a> (flow::log::Logger *logger_ptr, <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code)</td></tr>
<tr class="memdesc:acd387ce27214601a70a0e1c6025075f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be invoked after exactly one successful <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> call (and that <code>Blob</code> being filled-out and <code>.resize()</code>d): finalizes the deserialization of everything except the potential user-message body.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1">More...</a><br /></td></tr>
<tr class="separator:acd387ce27214601a70a0e1c6025075f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acc5514d773db8edb0d8d0c3d52743a6a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a">deserialize_body</a> (<a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *err_code)</td></tr>
<tr class="memdesc:acc5514d773db8edb0d8d0c3d52743a6a"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be invoked after <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> == N</code>, and <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> was called N times (with all N <code>Blob</code>s filled-out and <code>.resize()</code>d): finalizes the deserialization of the user-message body.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a">More...</a><br /></td></tr>
<tr class="separator:acc5514d773db8edb0d8d0c3d52743a6a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad42fc6c023dae0f6bf66ffb3a3437fa4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#af7f35fc7588d97a838274fa25700ead9">msg_id_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4">id_or_none</a> () const</td></tr>
<tr class="memdesc:ad42fc6c023dae0f6bf66ffb3a3437fa4"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns the message ID of this in-message; 0 means it's an internal message (<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> applies), else it's a user message (<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> applies).  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4">More...</a><br /></td></tr>
<tr class="separator:ad42fc6c023dae0f6bf66ffb3a3437fa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac14e45f1df2ade79bfe525a97d65469c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#af7f35fc7588d97a838274fa25700ead9">msg_id_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac14e45f1df2ade79bfe525a97d65469c">originating_msg_id_or_none</a> () const</td></tr>
<tr class="memdesc:ac14e45f1df2ade79bfe525a97d65469c"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns the message ID of the out-message to which this in-message claims to be responding; or 0 if it is not a response.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac14e45f1df2ade79bfe525a97d65469c">More...</a><br /></td></tr>
<tr class="separator:ac14e45f1df2ade79bfe525a97d65469c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a880fb3eb4b037c9a06d0a683feed660f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#afdc86a45b50e9869329b11a1e576b172">Internal_msg_body_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f">internal_msg_body_root</a> () const</td></tr>
<tr class="memdesc:a880fb3eb4b037c9a06d0a683feed660f"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, similar to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> but for the internal-message root.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f">More...</a><br /></td></tr>
<tr class="separator:a880fb3eb4b037c9a06d0a683feed660f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9bb1f48ee2a73c081cacf6c69df5a1be"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceipc_1_1transport_1_1struc.html#a6751c05fb6582a34c7c47ac470c4a48b">Session_token</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a9bb1f48ee2a73c081cacf6c69df5a1be">session_token</a> () const</td></tr>
<tr class="memdesc:a9bb1f48ee2a73c081cacf6c69df5a1be"><td class="mdescLeft">&#160;</td><td class="mdescRight">To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns session token tagging this in-message.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a9bb1f48ee2a73c081cacf6c69df5a1be">More...</a><br /></td></tr>
<tr class="separator:a9bb1f48ee2a73c081cacf6c69df5a1be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a529a341e65bfb13b5a4caad131a37b0f"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">Mdt_reader</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a529a341e65bfb13b5a4caad131a37b0f">mdt_root</a> () const</td></tr>
<tr class="memdesc:a529a341e65bfb13b5a4caad131a37b0f"><td class="mdescLeft">&#160;</td><td class="mdescRight">The <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad2c43c92a286ab7d186d810631a1701" title="Same as Msg_mdt_out::Body.">Mdt</a> root capnp-generated accessor object.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a529a341e65bfb13b5a4caad131a37b0f">More...</a><br /></td></tr>
<tr class="separator:a529a341e65bfb13b5a4caad131a37b0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-types" name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:ad2fd47038e8a8c06aa00661a8e1e9289"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">Reader</a> = typename Reader_config::Reader</td></tr>
<tr class="memdesc:ad2fd47038e8a8c06aa00661a8e1e9289"><td class="mdescLeft">&#160;</td><td class="mdescRight">Same as <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html#aae507a42f29546fa13075a438d96f3f5" title="Short-hand for user-specified Struct_builder type.">Msg_out::Builder</a> but the reader that can decode what that serializing <code>Builder</code> did.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">More...</a><br /></td></tr>
<tr class="separator:ad2fd47038e8a8c06aa00661a8e1e9289"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a7ebd1458417e3ffea3220424aacced9c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">Reader_config</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a7ebd1458417e3ffea3220424aacced9c">m_reader_config</a></td></tr>
<tr class="memdesc:a7ebd1458417e3ffea3220424aacced9c"><td class="mdescLeft">&#160;</td><td class="mdescRight">See ctor.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a7ebd1458417e3ffea3220424aacced9c">More...</a><br /></td></tr>
<tr class="separator:a7ebd1458417e3ffea3220424aacced9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6fd10709650b97357f05bf9cf402c10e"><td class="memItemLeft" align="right" valign="top">std::optional&lt; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">Reader</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e">m_mdt_reader</a></td></tr>
<tr class="memdesc:a6fd10709650b97357f05bf9cf402c10e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if any) or describing and containing the internal message (otherwise).  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e">More...</a><br /></td></tr>
<tr class="separator:a6fd10709650b97357f05bf9cf402c10e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af29e72cdaf6edd4f0124bc9fe0c46592"><td class="memItemLeft" align="right" valign="top">std::optional&lt; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">Reader</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592">m_body_reader</a></td></tr>
<tr class="memdesc:af29e72cdaf6edd4f0124bc9fe0c46592"><td class="mdescLeft">&#160;</td><td class="mdescRight">Like <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e" title="Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if a...">m_mdt_reader</a> but for the user message if any.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592">More...</a><br /></td></tr>
<tr class="separator:af29e72cdaf6edd4f0124bc9fe0c46592"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4733178dead33f39d8f3bf60faef4723"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4733178dead33f39d8f3bf60faef4723">m_mdt_deserialized_ok</a></td></tr>
<tr class="memdesc:a4733178dead33f39d8f3bf60faef4723"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts <code>false</code>; becomes <code>true</code> immutably once <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> succeeds.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4733178dead33f39d8f3bf60faef4723">More...</a><br /></td></tr>
<tr class="separator:a4733178dead33f39d8f3bf60faef4723"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af501f959aded43b1777937c895b92f5b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af501f959aded43b1777937c895b92f5b">m_body_deserialized_ok</a></td></tr>
<tr class="memdesc:af501f959aded43b1777937c895b92f5b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts <code>false</code>; becomes <code>true</code> immutably once <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a> succeeds (never if it's an internal message).  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af501f959aded43b1777937c895b92f5b">More...</a><br /></td></tr>
<tr class="separator:af501f959aded43b1777937c895b92f5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a198052c9afc3f0f2727dd38214169b2b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">Mdt_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a198052c9afc3f0f2727dd38214169b2b">m_mdt_root</a></td></tr>
<tr class="memdesc:a198052c9afc3f0f2727dd38214169b2b"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a>; meaningless until <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4733178dead33f39d8f3bf60faef4723" title="Starts false; becomes true immutably once deserialize_mdt() succeeds.">m_mdt_deserialized_ok</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a198052c9afc3f0f2727dd38214169b2b">More...</a><br /></td></tr>
<tr class="separator:a198052c9afc3f0f2727dd38214169b2b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8dbe5e947bef497468ff8fc84090b398"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">Body_reader</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a8dbe5e947bef497468ff8fc84090b398">m_body_root</a></td></tr>
<tr class="memdesc:a8dbe5e947bef497468ff8fc84090b398"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>; meaningless until <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af501f959aded43b1777937c895b92f5b" title="Starts false; becomes true immutably once deserialize_body() succeeds (never if it&#39;s an internal mess...">m_body_deserialized_ok</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a8dbe5e947bef497468ff8fc84090b398">More...</a><br /></td></tr>
<tr class="separator:a8dbe5e947bef497468ff8fc84090b398"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa4c99d20d237670ba77769e721891b4b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#a6751c05fb6582a34c7c47ac470c4a48b">Session_token</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa4c99d20d237670ba77769e721891b4b">m_session_token</a></td></tr>
<tr class="memdesc:aa4c99d20d237670ba77769e721891b4b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Starts uninitialized, this is assigned exactly once by <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, storing the session-token that was embedded in the in-message.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa4c99d20d237670ba77769e721891b4b">More...</a><br /></td></tr>
<tr class="separator:aa4c99d20d237670ba77769e721891b4b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a62c9c5fe295e00fc7672a7d256ec28f1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a62c9c5fe295e00fc7672a7d256ec28f1">m_hndl_or_null</a></td></tr>
<tr class="memdesc:a62c9c5fe295e00fc7672a7d256ec28f1"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac4f7c03e1080913f949b9b24b776dc6a" title="Store the Native_handle (potentially .null(), meaning none) in this in-message.">store_native_handle_or_null()</a>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a62c9c5fe295e00fc7672a7d256ec28f1">More...</a><br /></td></tr>
<tr class="separator:a62c9c5fe295e00fc7672a7d256ec28f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:aad52996a4d66f74e21e4f2e74c93c763"><td class="memTemplParams" colspan="2">template&lt;typename Message_body , typename Struct_reader_config &gt; </td></tr>
<tr class="memitem:aad52996a4d66f74e21e4f2e74c93c763"><td class="memTemplItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad52996a4d66f74e21e4f2e74c93c763">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a>&lt; Message_body, Struct_reader_config &gt; &amp;val)</td></tr>
<tr class="memdesc:aad52996a4d66f74e21e4f2e74c93c763"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of the given <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a></code> to the given <code>ostream</code>.  <a href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad52996a4d66f74e21e4f2e74c93c763">More...</a><br /></td></tr>
<tr class="separator:aad52996a4d66f74e21e4f2e74c93c763"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><div class="compoundTemplParams">template&lt;typename Message_body, typename Struct_reader_config&gt;<br />
class ipc::transport::struc::Msg_in&lt; Message_body, Struct_reader_config &gt;</div><p >A structured in-message <em>instance</em> suitable as received and emittable (to user) by <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a>. </p>
<p >Publicly these are never constructed but emitted into <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">Channel</a></code>-passed handlers, wrapped into <code>shared_ptr</code> <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#ae1f4b316eaeb7ed520a84d9e21e21063" title="A ref-counted handle to Msg_in.">struc::Channel::Msg_in_ptr</a>. These handlers include <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#a160a8d49624f15a2596ee7b0244584b0" title="Registers the expectation of up to 1 notification in-message whose Msg_which equals which.">struc::Channel::expect_msg()</a>, <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#a3376b821b129ca3847484a178e080c67" title="Registers the expectation of 0+ notification in-messages whose Msg_which equals which.">struc::Channel::expect_msgs()</a>, and <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#a97506bcb695f22e7ca6b480bae5b2346" title="Identical to send() sends the out-message not as a notification but as a request, registering the exp...">struc::Channel::async_request()</a> and <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#aa41aee3c76035f43833078e625e6ef78" title="Equivalent to the other sync_request() overload but with no timeout; meaning it shall exit only once ...">struc::Channel::sync_request()</a>. Once available to the user, one accesses the in-place (zero-copy) capnp serialization via <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>, via which one can access the message's read-only contents.</p>
<dl class="section see"><dt>See also</dt><dd><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> </dd>
<dd>
"Lifecycle of an out-message" section of <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a> class doc header for useful context. Note that for each <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a>, there will exist 0+ <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a></code>s, one per successful <code>send()</code> (et al) paired with emission to user via aformentioned handlers. The latter represent each instance of the original message being received; the former represents the original message. Hence <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a> access is read-only (<code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289" title="Same as Msg_out::Builder but the reader that can decode what that serializing Builder did.">Reader</a></code> access only); <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> access is read/write (<code>Builder</code> access).</dd></dl>
<h3>Resource use: RAM</h3>
<p >If <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b" title="See struc::Channel::Reader_config.">Reader_config</a> is non-SHM-based, then a <code>*this</code> is analogous to a <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a>; the RAM used is released once <code>*this</code> is destroyed. If it <em>is</em> SHM-based, then the cross-process ref-count scheme explained in <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> doc header is in force.</p>
<h3>Resource use: the <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> (if any)</h3>
<p >Firstly see similarly named section in <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> doc header. In particular note that the <code>*this</code>-stored descriptor is not the same descriptor as the one in the out-message object; rather it's a descriptor in a different process referring to the the same description, with an OS/kernel-held ref-count.</p>
<p >Even if <code>*this</code> stores a non-null <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a>, it will never return it to the OS on your behalf. You may do so if and when desired. This is different from <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> which "owns" its copy and will return it to the OS at destruction.</p>
<h3>Impl notes</h3>
<p >This follows the same facade-API pattern as <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a>; see similar place in its doc header. Same applies here. However: <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a> represents an <em>instance</em> of a received message. Therefore it contains <em>both</em></p><ul>
<li>metadata-message about the associated user-message, if any, or the internal message; message ID, originating message ID, etc.; and</li>
<li>the user message (if any).</li>
</ul>
<p >So, in fact, on the sender side <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a> maintains the user's <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> (if any) and a user-invisible (created at send() time) <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html" title="Internally used (data-free) addendum on-top of Msg_out; really an alias to Msg_out&lt;schema::detail::St...">Msg_mdt_out</a>, which is just a somewhat-decorated-API <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> over an internal-use schema. On the receiver side <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a> stores <em>both</em> counterpart read-only deserializations.</p><ul>
<li><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> provides <code>public</code> user access to the user body;</li>
<li><code>protected</code> accessors provide access to the other stuff, like <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a> and <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac14e45f1df2ade79bfe525a97d65469c" title="To be called only after deserialize_mdt(), returns the message ID of the out-message to which this in...">originating_msg_id_or_none()</a>, which <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a> uses to maintain operation. These are <code>public</code>ly exposed via <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out__impl.html" title="Internally used (data-free) addendum on-top of Msg_out which makes the protected API public instead.">Msg_out_impl</a>.</li>
</ul>
<p >In the case of an internal message, a <code>*this</code> is never emitted to the user. In that case <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> provides internal access to the message.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Message_body</td><td>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a>: this is the counterpart. </td></tr>
    <tr><td class="paramname">Struct_reader_config</td><td>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a>: this is the counterpart. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00545">545</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="aa408e309fcb402c061d969742874ca6c" name="aa408e309fcb402c061d969742874ca6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa408e309fcb402c061d969742874ca6c">&#9670;&nbsp;</a></span>Body</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Body =  Message_body</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#a27a273ed7e1aca34b721fea22c869a41" title="Short-hand for the Message_body template param, this is the capnp message schema transmissible over *...">struc::Channel::Msg_body</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00552">552</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a6e21b165a0673138db44d86584dd5059" name="a6e21b165a0673138db44d86584dd5059"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6e21b165a0673138db44d86584dd5059">&#9670;&nbsp;</a></span>Body_reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Body_reader =  typename Body::Reader</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for capnp-generated read-only-accessing <code>Reader</code> nested class of <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c" title="See struc::Channel::Msg_body.">Body</a>. See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00555">555</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="afdc86a45b50e9869329b11a1e576b172" name="afdc86a45b50e9869329b11a1e576b172"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdc86a45b50e9869329b11a1e576b172">&#9670;&nbsp;</a></span>Internal_msg_body_reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Internal_msg_body_reader =  typename schema::detail::StructuredMessage::InternalMessageBody::Reader</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p><code>Reader</code> counterpart to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html#a8b0d864f297026952728c9bf5f90cb19" title="In the event *this describes an internally-created message – for internal purposes,...">Msg_mdt_out::Internal_msg_body_builder</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00639">639</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="aad2c43c92a286ab7d186d810631a1701" name="aad2c43c92a286ab7d186d810631a1701"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad2c43c92a286ab7d186d810631a1701">&#9670;&nbsp;</a></span>Mdt</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Mdt =  schema::detail::StructuredMessage</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Same as <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html#aab352abf2ced76f2bad6700d75290132" title="See struc::Channel::Msg_body.">Msg_mdt_out::Body</a></code>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00642">642</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a99df8a99bc2ed106d6a03f807e6e5966" name="a99df8a99bc2ed106d6a03f807e6e5966"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a99df8a99bc2ed106d6a03f807e6e5966">&#9670;&nbsp;</a></span>Mdt_reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Mdt_reader =  typename Mdt::Reader</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Same as <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html#a49dd99dd16346904de43a7af3dbf5379" title="Short-hand for capnp-generated mutating Builder nested class of Body. See body_root().">Msg_mdt_out::Body_builder</a></code> but the <code>Reader</code> instead. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00645">645</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="ad2fd47038e8a8c06aa00661a8e1e9289" name="ad2fd47038e8a8c06aa00661a8e1e9289"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad2fd47038e8a8c06aa00661a8e1e9289">&#9670;&nbsp;</a></span>Reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Reader =  typename Reader_config::Reader</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Same as <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html#aae507a42f29546fa13075a438d96f3f5" title="Short-hand for user-specified Struct_builder type.">Msg_out::Builder</a> but the reader that can decode what that serializing <code>Builder</code> did. </p>
<p >This deserializes the metadata and (if any) user message. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00794">794</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="af8c335ada1b33fcc732047283e60177b" name="af8c335ada1b33fcc732047283e60177b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8c335ada1b33fcc732047283e60177b">&#9670;&nbsp;</a></span>Reader_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Reader_config =  Struct_reader_config</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html#ad3ff78f00b7f230562d713ec6cf8499c" title="Short-hand for the reader engine type.">struc::Channel::Reader_config</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00558">558</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a234708ed176f270f6372536ba3571b9a" name="a234708ed176f270f6372536ba3571b9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a234708ed176f270f6372536ba3571b9a">&#9670;&nbsp;</a></span>~Msg_in()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::~<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns resources, potentially including potentially significant RAM resources, taken before emitting to the user. </p>
<p ><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c" title="The Native_handle – potentially null meaning none – embedded in this message.">native_handle_or_null()</a>, even if not <code>.null()</code>, is not returned to the OS.</p>
<p >See class doc header for discussion. </p>

</div>
</div>
<a id="ae3e6be294fbff87979a407a9e971da8a" name="ae3e6be294fbff87979a407a9e971da8a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae3e6be294fbff87979a407a9e971da8a">&#9670;&nbsp;</a></span>Msg_in()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::Msg_in </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">Reader_config</a> &amp;&#160;</td>
          <td class="paramname"><em>struct_reader_config</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs a not-ready-for-public-consumption in-message which awaits serialization-storing segments to be added via <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> and then finalized with <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> and possibly <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a>. </p>
<p >After the latter 1-2: <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> or <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> can be used to access the deserialized data; as can <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a> and similar accessors.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">struct_reader_config</td><td>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Channel.html" title="Owning and wrapping a pre-connected transport::Channel peer (an endpoint of an established channel ov...">struc::Channel</a> ctors. This is copied, memorized. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01117">1117</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a3a1a75d7d7b108d46efa1892dd2571b7" name="a3a1a75d7d7b108d46efa1892dd2571b7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a1a75d7d7b108d46efa1892dd2571b7">&#9670;&nbsp;</a></span>add_serialization_segment()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::util::Blob * <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::add_serialization_segment </td>
          <td>(</td>
          <td class="paramtype">size_t&#160;</td>
          <td class="paramname"><em>max_sz</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prior to <code>deserialization_*()</code> obtains a memory area <code>max_sz</code> bytes long into which the user may write-to until the next <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a>, <code>deserialization_*()</code>, or dtor call (whichever happens first); returns a pointer to that area as described by the pointed-to <code>Blob</code>'s [<code>begin()</code>, <code>end()</code>) range. </p>
<p >If the reader impl decides <code>max_sz</code> bytes are not available, returns null. <code>*this</code> shall not be used subsequent to such an eventuality.</p>
<p >This essentially forwards to the appropriate <a class="el" href="classipc_1_1transport_1_1struc_1_1Struct__reader.html#ae450aff09cc9d71b75b382d59a9cfc23" title="Prior to deserialization() obtains a memory area max_sz bytes long into which the user may write-to u...">Struct_reader::add_serialization_segment()</a>; hence the same requirements, including w/r/t alignment and subsequent storing-into and modification of returned <code>Blob</code>, apply as described in that doc header. That said:</p><ul>
<li>The first <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> call must be the <em>sole</em> segment of the metadata message (corresponding to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html" title="Internally used (data-free) addendum on-top of Msg_out; really an alias to Msg_out&lt;schema::detail::St...">Msg_mdt_out</a>). After the returned <code>Blob</code> is filled-out and <code>.resize()</code>d, you must invoke <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> which shall return the number of additional <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> calls to make. If that number is 0 (&lt;=&gt; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a> is 0 &lt;=&gt; there is an internal message in the <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__mdt__out.html" title="Internally used (data-free) addendum on-top of Msg_out; really an alias to Msg_out&lt;schema::detail::St...">Msg_mdt_out</a>), then there shall be no further <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> calls; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> can be used. Otherwise:</li>
<li>The following <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> calls (the 2nd, 3rd, ...) ones shall be, in order, comprised by the user-message serialization (corresponding to <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a>&lt;Message_body&gt;</code>). After each call fill-out and <code>.resize()</code> the returned <code>Blob</code>. After the last call call <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a>; then <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> can be used.</li>
</ul>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">max_sz</td><td>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Struct__reader.html#ae450aff09cc9d71b75b382d59a9cfc23" title="Prior to deserialization() obtains a memory area max_sz bytes long into which the user may write-to u...">Struct_reader::add_serialization_segment()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Struct__reader.html#ae450aff09cc9d71b75b382d59a9cfc23" title="Prior to deserialization() obtains a memory area max_sz bytes long into which the user may write-to u...">Struct_reader::add_serialization_segment()</a>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01138">1138</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a56fa38feb9c907ae3f0f1a6ff16dd32f" name="a56fa38feb9c907ae3f0f1a6ff16dd32f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a56fa38feb9c907ae3f0f1a6ff16dd32f">&#9670;&nbsp;</a></span>body_root()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a>&lt; Message_body, Struct_reader_config &gt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">::Body_reader</a> &amp; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::body_root</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aa408e309fcb402c061d969742874ca6c" title="See struc::Channel::Msg_body.">Body</a> root capnp-generated accessor object. </p>
<p >E.g.: <code>this-&gt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>.getSomeStruct().setSomeField()</code> will access the capnp-<code>struct</code>-typed root field <code>someStruct</code> and pluck out the value <code>someField</code> &ndash; presumably an integer &ndash; within it. The ref returned shall always be to the same address until <code>*this</code> is destroyed.</p>
<p ><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059" title="Short-hand for capnp-generated read-only-accessing Reader nested class of Body. See body_root().">Body_reader</a> is light-weight, so you may make a copy and then access via that, if desired. However whether <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a></code> itself or such a copy, such a <code>Reader</code> object may not be accessed after <code>*this</code> is destroyed.</p>
<p >Informally we recommend against value-copying <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>: Light-weight or not, it's a copy, and copying a pointer/cref is cheaper; and it may not live past <code>*this</code> anyway; and <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> always returns the same address. So just store the cref (or pointer-to-<code>const</code> with the same addr).</p>
<h3>Quick capnp tips</h3>
<p >You should really read all of capnp docs at its web site. They are very useful and well written and not overly formal despite being quite comprehensive. That said a couple of gotchas/tips:</p><ul>
<li>On a <code>Reader</code>, <code>.getX()</code> is lightning-fast, like accessing <code>struct</code> members directly &ndash; but only when <code>X</code> is of a scalar type. Compount types, where <code>.getX()</code> returns not a native type but another <code>Reader</code>, need to perform some pointer checking and are slower. Therefore, if you plan to <code>.getX()</code> and then <code>.getA()</code> and <code>.getB()</code> (and similar) on that <code>X</code>, you should save the result (<code>auto x = ....getX();</code>); then access via the saved result (<code>a = x.getA(...); b = x.getB(...)</code>).</li>
</ul>
<p >To pretty-print (with indent/newlines) you can use: <code>capnp::prettyPrint(M.body_root()).flatten().cStr()</code>.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01316">1316</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="acc5514d773db8edb0d8d0c3d52743a6a" name="acc5514d773db8edb0d8d0c3d52743a6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc5514d773db8edb0d8d0c3d52743a6a">&#9670;&nbsp;</a></span>deserialize_body()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::deserialize_body </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be invoked after <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> == N</code>, and <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> was called N times (with all N <code>Blob</code>s filled-out and <code>.resize()</code>d): finalizes the deserialization of the user-message body. </p>
<p >This must be called strictly before any calls to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>.</p>
<p >If called before a post-deserialize_mdt() <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a>, behavior is undefined (assertion may trip).</p>
<p >If called more than once, behavior is undefined (assertion may trip).</p>
<p >If it fails (emits truthy <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a>), it is pointless to use <code>*this</code>. Recommend destruction.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">err_code</td><td>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01266">1266</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="acd387ce27214601a70a0e1c6025075f1" name="acd387ce27214601a70a0e1c6025075f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd387ce27214601a70a0e1c6025075f1">&#9670;&nbsp;</a></span>deserialize_mdt()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">size_t <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::deserialize_mdt </td>
          <td>(</td>
          <td class="paramtype">flow::log::Logger *&#160;</td>
          <td class="paramname"><em>logger_ptr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89">Error_code</a> *&#160;</td>
          <td class="paramname"><em>err_code</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be invoked after exactly one successful <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> call (and that <code>Blob</code> being filled-out and <code>.resize()</code>d): finalizes the deserialization of everything except the potential user-message body. </p>
<p >This must be called strictly before any calls to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a>, <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a>, <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac14e45f1df2ade79bfe525a97d65469c" title="To be called only after deserialize_mdt(), returns the message ID of the out-message to which this in...">originating_msg_id_or_none()</a>, or <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a9bb1f48ee2a73c081cacf6c69df5a1be" title="To be called only after deserialize_mdt(), returns session token tagging this in-message.">session_token()</a>; and any subsequent <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> calls (if any).</p>
<p >The value this returns (sans error) dictates the exact # of further <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> calls to make.</p><ul>
<li>If 0: You may use the accessor API immediately. <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> is OK; <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a> == 0</code>; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> may not be used.</li>
<li>Else: You may use the accessor API immediately. <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad42fc6c023dae0f6bf66ffb3a3437fa4" title="To be called only after deserialize_mdt(), returns the message ID of this in-message; 0 means it&#39;s an...">id_or_none()</a> != 0</code>; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> may not be used; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> may not be used <em>yet</em> until successful <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a>.</li>
</ul>
<p >If called before <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a>, behavior is undefined (assertion may trip).</p>
<p >If called more than once, behavior is undefined (assertion may trip).</p>
<p >If it fails (emits truthy <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a>), it is pointless to use <code>*this</code>. Recommend destruction.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger_ptr</td><td>Logger to use for logging within this method. </td></tr>
    <tr><td class="paramname">err_code</td><td>Caution: Unlike user-facing methods, this does not throw (except capnp-generated exceptions); and <code>err_code</code> may not be null. Other than that: <a class="el" href="namespaceipc.html#aa3192e586cc45d3e7c22463bf2760f89" title="Short-hand for flow::Error_code which is very common.">Error_code</a> generated: falsy on success, else: <a class="el" href="namespaceipc_1_1transport_1_1struc_1_1error.html#a990b9ff850cf9aaf354efdd07d86a71da26ab25e100104aeb567d90f794313e3b" title="Structured channel: received structured message with invalid internally-set/used fields.">error::Code::S_STRUCT_CHANNEL_INTERNAL_PROTOCOL_MISUSED_SCHEMA</a> (opposing <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__out.html" title="A structured out-message suitable to be sent via struc::Channel::send() (et al).">Msg_out</a> code filled out the fields in an unexpected way), anything emitted by <a class="el" href="classipc_1_1transport_1_1struc_1_1Struct__reader.html#a95576f8cd8ad45a720276bd074cea4f2" title="After all serialization segments have been acquired in RAM via add_serialization_segment() and finali...">Struct_reader::deserialization()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01161">1161</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

<p class="reference">References <a class="el" href="namespaceipc_1_1transport_1_1struc_1_1error.html#a990b9ff850cf9aaf354efdd07d86a71da26ab25e100104aeb567d90f794313e3b">ipc::transport::struc::error::S_STRUCT_CHANNEL_INTERNAL_PROTOCOL_MISUSED_SCHEMA</a>.</p>

</div>
</div>
<a id="ad42fc6c023dae0f6bf66ffb3a3437fa4" name="ad42fc6c023dae0f6bf66ffb3a3437fa4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad42fc6c023dae0f6bf66ffb3a3437fa4">&#9670;&nbsp;</a></span>id_or_none()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#af7f35fc7588d97a838274fa25700ead9">msg_id_t</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::id_or_none</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns the message ID of this in-message; 0 means it's an internal message (<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a> applies), else it's a user message (<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> applies). </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01285">1285</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a880fb3eb4b037c9a06d0a683feed660f" name="a880fb3eb4b037c9a06d0a683feed660f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a880fb3eb4b037c9a06d0a683feed660f">&#9670;&nbsp;</a></span>internal_msg_body_root()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a>&lt; Message_body, Struct_reader_config &gt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#afdc86a45b50e9869329b11a1e576b172">::Internal_msg_body_reader</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::internal_msg_body_root</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, similar to <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> but for the internal-message root. </p>
<p >See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#afdc86a45b50e9869329b11a1e576b172" title="Reader counterpart to Msg_mdt_out::Internal_msg_body_builder.">Internal_msg_body_reader</a> doc header.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01308">1308</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a529a341e65bfb13b5a4caad131a37b0f" name="a529a341e65bfb13b5a4caad131a37b0f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a529a341e65bfb13b5a4caad131a37b0f">&#9670;&nbsp;</a></span>mdt_root()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a>&lt; Message_body, Struct_reader_config &gt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">::Mdt_reader</a> &amp; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::mdt_root</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aad2c43c92a286ab7d186d810631a1701" title="Same as Msg_mdt_out::Body.">Mdt</a> root capnp-generated accessor object. </p>
<p >May be useful for, say, pretty-printing it to log (e.g.: <code>capnp::prettyPrint(M.mdt_root()).flatten().cStr()</code>). We do not recommend its use for other purposes; stylistically it is better to access items via individual accessors like <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a9bb1f48ee2a73c081cacf6c69df5a1be" title="To be called only after deserialize_mdt(), returns session token tagging this in-message.">session_token()</a> or <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a>.</p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01323">1323</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="aba0b83c9d8a7e8f782202406ca387e2c" name="aba0b83c9d8a7e8f782202406ca387e2c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aba0b83c9d8a7e8f782202406ca387e2c">&#9670;&nbsp;</a></span>native_handle_or_null()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::native_handle_or_null</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>The <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> &ndash; potentially null meaning none &ndash; embedded in this message. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01330">1330</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="ac14e45f1df2ade79bfe525a97d65469c" name="ac14e45f1df2ade79bfe525a97d65469c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac14e45f1df2ade79bfe525a97d65469c">&#9670;&nbsp;</a></span>originating_msg_id_or_none()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#af7f35fc7588d97a838274fa25700ead9">msg_id_t</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::originating_msg_id_or_none</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns the message ID of the out-message to which this in-message claims to be responding; or 0 if it is not a response. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01292">1292</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a9bb1f48ee2a73c081cacf6c69df5a1be" name="a9bb1f48ee2a73c081cacf6c69df5a1be"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9bb1f48ee2a73c081cacf6c69df5a1be">&#9670;&nbsp;</a></span>session_token()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="namespaceipc_1_1transport_1_1struc.html#a6751c05fb6582a34c7c47ac470c4a48b">Session_token</a> &amp; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::session_token</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>To be called only after <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, returns session token tagging this in-message. </p>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01301">1301</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="ac4f7c03e1080913f949b9b24b776dc6a" name="ac4f7c03e1080913f949b9b24b776dc6a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac4f7c03e1080913f949b9b24b776dc6a">&#9670;&nbsp;</a></span>store_native_handle_or_null()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::store_native_handle_or_null </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>native_handle_or_null</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Store the <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> (potentially <code>.null()</code>, meaning none) in this in-message. </p>
<p >Call this at most once; or behavior undefined (assertion may trip).</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">native_handle_or_null</td><td>The <a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8" title="Convenience alias for the commonly used type util::Native_handle.">Native_handle</a> (<code>.null() == true</code> if none) to move into <code>*this</code>. Made <code>.null() == true</code> upon return. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01127">1127</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a4783bd852b1dcba1542e0cfe37205e9e" name="a4783bd852b1dcba1542e0cfe37205e9e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4783bd852b1dcba1542e0cfe37205e9e">&#9670;&nbsp;</a></span>to_ostream()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::to_ostream </td>
          <td>(</td>
          <td class="paramtype">std::ostream *&#160;</td>
          <td class="paramname"><em>os</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Prints string representation to the given <code>ostream</code>. </p>
<p >This representation lacks newlines/indentation; includes a (potentially truncated) pretty-printed representation of <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a></code> contents; and includes <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c" title="The Native_handle – potentially null meaning none – embedded in this message.">native_handle_or_null()</a>.</p>
<p >Caution: This could be an operation expensive in processor cycles and, temporarily, RAM; and thus should be used judiciously. To help drive your decision-making: This method, internally,</p><ol type="1">
<li>uses capnp <code>kj::str(this-&gt;body_root)</code> to generate a <em>full</em> pretty-print of <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> contents;</li>
<li>truncates the result of the latter, as needed for a reasonably short output, and prints the result;</li>
<li>adds <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#aba0b83c9d8a7e8f782202406ca387e2c" title="The Native_handle – potentially null meaning none – embedded in this message.">native_handle_or_null()</a> and possibly a few other small information items.</li>
</ol>
<p >Because there is no reasonably-available way to stop generating the pretty-print in step 1 upon reaching a certain number of characters, the operation may take a while, if many non-default bytes have been mutated-in; and before truncation the resulting string may take significant RAM accordingly.</p>
<p >If used by internal code before successful <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> and/or before successful <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a> (if one would even be possible in the first place &ndash; not so with internal messages), this method will print useful things. Moreover the above public-facing description is no longer complete in that case. In any case the method remains suitable for TRACE-logging but not INFO-logging by internal code, at least in the per-message common code path. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01336">1336</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="aad52996a4d66f74e21e4f2e74c93c763" name="aad52996a4d66f74e21e4f2e74c93c763"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad52996a4d66f74e21e4f2e74c93c763">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">Msg_in</a>&lt; Message_body, Struct_reader_config &gt; &amp;&#160;</td>
          <td class="paramname"><em>val</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of the given <code><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html" title="A structured in-message instance suitable as received and emittable (to user) by struc::Channel.">Msg_in</a></code> to the given <code>ostream</code>. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to which to write. </td></tr>
    <tr><td class="paramname">val</td><td>Object to serialize. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l01407">1407</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="af501f959aded43b1777937c895b92f5b" name="af501f959aded43b1777937c895b92f5b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af501f959aded43b1777937c895b92f5b">&#9670;&nbsp;</a></span>m_body_deserialized_ok</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_body_deserialized_ok</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Starts <code>false</code>; becomes <code>true</code> immutably once <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a> succeeds (never if it's an internal message). </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00828">828</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="af29e72cdaf6edd4f0124bc9fe0c46592" name="af29e72cdaf6edd4f0124bc9fe0c46592"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af29e72cdaf6edd4f0124bc9fe0c46592">&#9670;&nbsp;</a></span>m_body_reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::optional&lt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">Reader</a>&gt; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_body_reader</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Like <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e" title="Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if a...">m_mdt_reader</a> but for the user message if any. </p>
<p >Essentially: the 2nd, 3rd, ... <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> forward to the same method on this <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592" title="Like m_mdt_reader but for the user message if any.">m_body_reader</a>. This stores the user-message payload if any. If none this is left null: there is no user message.</p>
<p ><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acc5514d773db8edb0d8d0c3d52743a6a" title="To be invoked after deserialize_mdt() == N, and add_serialization_segment() was called N times (with ...">deserialize_body()</a> forwards to the same method on <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592" title="Like m_mdt_reader but for the user message if any.">m_body_reader</a>. Then <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a> becomes available. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00822">822</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a8dbe5e947bef497468ff8fc84090b398" name="a8dbe5e947bef497468ff8fc84090b398"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8dbe5e947bef497468ff8fc84090b398">&#9670;&nbsp;</a></span>m_body_root</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6e21b165a0673138db44d86584dd5059">Body_reader</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_body_root</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>; meaningless until <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af501f959aded43b1777937c895b92f5b" title="Starts false; becomes true immutably once deserialize_body() succeeds (never if it&#39;s an internal mess...">m_body_deserialized_ok</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00834">834</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a62c9c5fe295e00fc7672a7d256ec28f1" name="a62c9c5fe295e00fc7672a7d256ec28f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a62c9c5fe295e00fc7672a7d256ec28f1">&#9670;&nbsp;</a></span>m_hndl_or_null</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1transport.html#a7ee4551983d9df16ec16a3139bac50e8">Native_handle</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_hndl_or_null</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ac4f7c03e1080913f949b9b24b776dc6a" title="Store the Native_handle (potentially .null(), meaning none) in this in-message.">store_native_handle_or_null()</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00844">844</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a4733178dead33f39d8f3bf60faef4723" name="a4733178dead33f39d8f3bf60faef4723"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4733178dead33f39d8f3bf60faef4723">&#9670;&nbsp;</a></span>m_mdt_deserialized_ok</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_mdt_deserialized_ok</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Starts <code>false</code>; becomes <code>true</code> immutably once <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> succeeds. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00825">825</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a6fd10709650b97357f05bf9cf402c10e" name="a6fd10709650b97357f05bf9cf402c10e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6fd10709650b97357f05bf9cf402c10e">&#9670;&nbsp;</a></span>m_mdt_reader</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::optional&lt;<a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#ad2fd47038e8a8c06aa00661a8e1e9289">Reader</a>&gt; <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_mdt_reader</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if any) or describing and containing the internal message (otherwise). </p>
<p >Essentially: the first <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> forwards to the same method on this <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e" title="Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if a...">m_mdt_reader</a>. (We ensure on the opposing side the metadata structure is always 1 segment, no more.) This stores a few things like message ID; plus possibly an internal-body; otherwise the # of times <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a3a1a75d7d7b108d46efa1892dd2571b7" title="Prior to deserialization_*() obtains a memory area max_sz bytes long into which the user may write-to...">add_serialization_segment()</a> must be called to complete <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592" title="Like m_mdt_reader but for the user message if any.">m_body_reader</a> serialization. In the former case <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af29e72cdaf6edd4f0124bc9fe0c46592" title="Like m_mdt_reader but for the user message if any.">m_body_reader</a> is left null: there is no user message.</p>
<p ><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a> forwards to <code>.deserialization()</code> on <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a6fd10709650b97357f05bf9cf402c10e" title="Deserializes the metadata sub-message, invisible to user: the thing describing the user message (if a...">m_mdt_reader</a>. Then the post-deserialization accessors become available except <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a56fa38feb9c907ae3f0f1a6ff16dd32f" title="The Body root capnp-generated accessor object.">body_root()</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00813">813</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a198052c9afc3f0f2727dd38214169b2b" name="a198052c9afc3f0f2727dd38214169b2b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a198052c9afc3f0f2727dd38214169b2b">&#9670;&nbsp;</a></span>m_mdt_root</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a99df8a99bc2ed106d6a03f807e6e5966">Mdt_reader</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_mdt_root</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a880fb3eb4b037c9a06d0a683feed660f" title="To be called only after deserialize_mdt(), similar to body_root() but for the internal-message root.">internal_msg_body_root()</a>; meaningless until <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a4733178dead33f39d8f3bf60faef4723" title="Starts false; becomes true immutably once deserialize_mdt() succeeds.">m_mdt_deserialized_ok</a>. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00831">831</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="a7ebd1458417e3ffea3220424aacced9c" name="a7ebd1458417e3ffea3220424aacced9c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7ebd1458417e3ffea3220424aacced9c">&#9670;&nbsp;</a></span>m_reader_config</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#af8c335ada1b33fcc732047283e60177b">Reader_config</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_reader_config</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See ctor. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00799">799</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<a id="aa4c99d20d237670ba77769e721891b4b" name="aa4c99d20d237670ba77769e721891b4b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa4c99d20d237670ba77769e721891b4b">&#9670;&nbsp;</a></span>m_session_token</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Message_body , typename Struct_reader_config &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceipc_1_1transport_1_1struc.html#a6751c05fb6582a34c7c47ac470c4a48b">Session_token</a> <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html">ipc::transport::struc::Msg_in</a>&lt; Message_body, Struct_reader_config &gt;::m_session_token</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Starts uninitialized, this is assigned exactly once by <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#acd387ce27214601a70a0e1c6025075f1" title="To be invoked after exactly one successful add_serialization_segment() call (and that Blob being fill...">deserialize_mdt()</a>, storing the session-token that was embedded in the in-message. </p>
<p >This is cached from the encoding in the tree accessed via <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a198052c9afc3f0f2727dd38214169b2b" title="See internal_msg_body_root(); meaningless until m_mdt_deserialized_ok.">m_mdt_root</a>. It is cached for <a class="el" href="classipc_1_1transport_1_1struc_1_1Msg__in.html#a9bb1f48ee2a73c081cacf6c69df5a1be" title="To be called only after deserialize_mdt(), returns session token tagging this in-message.">session_token()</a> perf only. </p>

<p class="definition">Definition at line <a class="el" href="msg_8hpp_source.html#l00841">841</a> of file <a class="el" href="msg_8hpp_source.html">msg.hpp</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>transport/struc/<a class="el" href="msg_8hpp_source.html">msg.hpp</a></li>
<li>transport/struc/<a class="el" href="struc__fwd_8hpp_source.html">struc_fwd.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu May 2 2024 23:56:39 for Flow-IPC by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
